/*
 * @Author: ZephyrGao
 * @Date: 2023-10-31 11:46:21
 * @Description: 按钮组件
 * 
 * 随拿随用
 * Copyright (c) 2023 by ZephyrGao, All Rights Reserved. 
 */
import 'package:flutter/material.dart';

/// `normal` `outline`  在主体文件中设置primary会影响 采用的是flutter SDK中内置组件
/// `normal`
///
/// `custom` 是完全自定义的样式
enum CnButtonType {
  normal, // 普通
  outline, // 带边框
  custom // 自定义
}

@immutable
class cnButtonBackgroundColorConfig {
  cnButtonBackgroundColorConfig();

  final Color primary = Color(0xff007AFF);
  final Color light = Color(0xff007AFF);
  final Color dark = Color(0xff007AFF);
  final Color disabled = Color(0xff007AFF);
  final Color hover = Color(0xff007AFF);
  final Color focus = Color(0xff007AFF);
  final Color text = Color(0xff007AFF);
}

class CnButton extends StatefulWidget {
  const CnButton(
      {super.key,
      this.type = CnButtonType.normal,
      this.text,
      this.textStyle,
      this.enabled,
      this.backgroundColor,
      this.onPressed,
      this.onHover,
      this.backgroundImage,
      this.onFocusChange,
      this.themeData,
      this.width,
      this.height,
      this.borderRadius,
      this.border,
      this.isCircle = false});
  // 按钮类型
  final CnButtonType type;
  // 按钮文本
  final String? text;
  // 按钮文本字体
  final TextStyle? textStyle;
  // 按钮宽度
  final double? width;
  // 按钮高度
  final double? height;
  // 是否可用
  final bool? enabled;
  // 按钮背景色
  final Color? backgroundColor;
  // 按钮图片
  final String? backgroundImage;
  // 按钮borderRadius
  final BorderRadius? borderRadius;
  // 按钮borderRadius
  final Border? border;
  // 按钮点击
  final VoidCallback? onPressed;
  // 按钮悬停
  final ValueChanged<bool>? onHover;
  // 焦点改变
  final ValueChanged<bool>? onFocusChange;
  // 按钮是否是圆形
  final bool isCircle;

  final ThemeData? themeData;
  @override
  State<CnButton> createState() => _CnButtonState();
}

class _CnButtonState extends State<CnButton> {
  bool _isPressed = false;
  @override
  Widget build(BuildContext context) {
    // ImageProvider image = CommonUtil.isLocalImage(widget.backgroundImage)
    //     ? AssetImage(widget.backgroundImage ?? "") as ImageProvider
    //     : NetworkImage(widget.backgroundImage ?? "");
    //  ImageProvider image = AssetImage(backgroundImage ?? "");
    //  ImageProvider image = NetworkImage(backgroundImage ?? "");
    return GestureDetector(
      onTapDown: (_) {
        setState(() {
          _isPressed = true;
        });
      },
      onTapUp: (_) {
        setState(() {
          _isPressed = false;
        });
      },
      onTapCancel: () {
        print("onTapCancel");
        setState(() {
          _isPressed = false;
        });
      },
      child: AnimatedContainer(
        curve: Curves.linear,
        duration: const Duration(milliseconds: 100),
        width: widget.width,
        height: widget.height,
        decoration: BoxDecoration(
          border: widget.border,
          shape: widget.isCircle ? BoxShape.circle : BoxShape.rectangle,
          borderRadius: widget.borderRadius,
          color: _isPressed ? Colors.red : widget.backgroundColor,
        ),
      ),
    );
  }
}

// @immutable
// class CnButton1 extends StatelessWidget {
//   //  : assert(backgroundImage == null && backgroundColor == null,
//   //           "backgroundImage or backgroundColor can not both exist")
//   const CnButton(
//       {super.key,
//       this.type = CnButtonType.normal,
//       this.text,
//       this.textStyle,
//       this.enabled,
//       this.backgroundColor,
//       this.onPressed,
//       this.onHover,
//       this.backgroundImage,
//       this.onFocusChange,
//       this.themeData,
//       this.width,
//       this.height});

//   // 按钮类型
//   final CnButtonType type;
//   // 按钮文本
//   final String? text;
//   // 按钮文本字体
//   final TextStyle? textStyle;
//   // 按钮宽度
//   final double? width;
//   // 按钮高度
//   final double? height;
//   // 是否可用
//   final bool? enabled;
//   // 按钮背景色
//   final Color? backgroundColor;
//   // 按钮图片
//   final String? backgroundImage;
//   // 按钮点击
//   final VoidCallback? onPressed;
//   // 按钮悬停
//   final ValueChanged<bool>? onHover;
//   // 焦点改变
//   final ValueChanged<bool>? onFocusChange;

//   final ThemeData? themeData;

//   @override
//   Widget build(BuildContext context) {
//     ImageProvider image = CommonUtil.isLocalImage(backgroundImage)
//         ? AssetImage(backgroundImage ?? "") as ImageProvider
//         : NetworkImage(backgroundImage ?? "");
//     //  ImageProvider image = AssetImage(backgroundImage ?? "");
//     //  ImageProvider image = NetworkImage(backgroundImage ?? "");
//     return GestureDetector(
//       onTapDown: (_) {
//         setState(() {
//           isPressed = true;
//         });
//       },
//       onTapUp: (_) {
//         setState(() {
//           isPressed = false;
//         });
//       },
//       onTapCancel: () {
//         setState(() {
//           isPressed = false;
//         });
//       },
//       child: AnimatedContainer(
//         duration: Duration(milliseconds: 200),
//         width: width,
//         height: height,
//         decoration: BoxDecoration(
//             color: backgroundColor, image: DecorationImage(image: image)),
//       ),
//     );
//   }

//   ///  * [FilledButton], a filled button that doesn't elevate when pressed.
//   ///  * [FilledButton.tonal], a filled button variant that uses a secondary fill color.
//   ///  * [OutlinedButton], a button with an outlined border and no fill color.
//   ///  * [TextButton], a button with no outline or fill color.
//   // Widget _buttonByType(CnButtonType type) {
//   //   switch (type) {
//   //     case CnButtonType.normal:
//   //       return ElevatedButton.icon(
//   //           onPressed: onPressed,
//   //           onHover: onHover,
//   //           style: ButtonStyle(),
//   //           icon: Icon(Icons.dangerous),
//   //           label: Text("123"));
//   //     // case CnButtonType.normal:
//   //     //   return FilledButton(
//   //     //     onPressed: onTap,
//   //     //     child: Text(text ?? ""),
//   //     //   );
//   //     //   return ElevatedButton(
//   //     //     onPressed: onTap,
//   //     //     child: Text(text ?? ""),
//   //     //   );

//   //     // case CnButtonType.warning:
//   //     //   return FilledButton.tonal(
//   //     //     onPressed: onTap,
//   //     //     child: Text(text ?? ""),
//   //     //   );
//   //     // case CnButtonType.success:
//   //     //   return OutlinedButton(
//   //     //     onPressed: onTap,
//   //     //     child: Text(text ?? ""),
//   //     //   );
//   //     // case CnButtonType.danger:
//   //     //   return TextButton(
//   //     //     onPressed: onTap,
//   //     //     child: Text(text ?? ""),
//   //     //   );
//   //     default:
//   //       return Container();
//   //   }
//   // }
// }
